package com.itheima.ui;

import com.itheima.Domain.User;
import com.itheima.util.CodeUtil;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.lang.reflect.Array;
import java.util.ArrayList;

public class LoginJFrame extends JFrame implements MouseListener {

    //构建一个集合存储用户的正确用户名密码
    static ArrayList<User> allUser=new ArrayList<>();
    static{
        allUser.add(new User("zhangsan","123"));
        allUser.add(new User("lisi","1234"));
    }



    JButton login=new JButton();
    JButton register=new JButton();
    JTextField UserName=new JTextField();
    JTextField password = new JTextField();
    JTextField code=new JTextField();
    JLabel rightCode=new JLabel();
    public LoginJFrame()
    {
        initJFrame();
        initView();
        //显示窗口
        this.setVisible(true);

    }
   //生成界面中的图片
    private void initView()
    {//添加用户名文本
        JLabel UserNameText=new JLabel(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\用户名.png"));
        UserNameText.setBounds(116,135,51,19);
        this.getContentPane().add(UserNameText);
        //添加用户名输入框

        UserName.setBounds(195,134,200,30);
        this.getContentPane().add(UserName);

        //添加密码文字
        JLabel passwordText = new JLabel(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\密码.png"));
        passwordText.setBounds(130, 195, 32, 16);
        this.getContentPane().add(passwordText);
        //4.密码输入框

        password.setBounds(195, 195, 200, 30);
        this.getContentPane().add(password);

      //验证码提示
        JLabel codeText=new JLabel(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\验证码.png"));
        codeText.setBounds(133,256,50,30);
        this.getContentPane().add(codeText);
        //验证码输入框

        code.setBounds(195,256,100,30);
        this.getContentPane().add(code);

        //利用定义的工具类获得一个随机的验证码
        String codeStr= CodeUtil.getCode();

        //将设置文字的内容
        rightCode.setText(codeStr);
        //设置文字的宽高位置
        rightCode.setBounds(300,256,50,30);
        this.getContentPane().add(rightCode);

        //添加登录按钮

        login.setBounds(123,310,128,47);
        login.setIcon(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\登录按钮.png"));

        //去掉按钮的默认界面进行美化
        login.setBorderPainted(false);
        //去掉按钮的默认背景
        login.setContentAreaFilled(false);
        this.getContentPane().add(login);

        //添加注册按钮

        register.setBounds(256,310,128,47);
        register.setIcon(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\注册按钮.png"));
        //去除按钮的默认边框
        register.setBorderPainted(false);
        //去除按钮的默认背景
        register.setContentAreaFilled(false);
        this.getContentPane().add(register);

        //
        login.addMouseListener(this);
        register.addMouseListener(this);

        //背景图片
        //7.添加背景图片
        JLabel background = new JLabel(new ImageIcon("puzzlegame\\image\\login\\background.png"));
        background.setBounds(0, 0, 470, 390);
        this.getContentPane().add(background);
    }


    private void initJFrame() {
        this.setSize(488,430);

        //设置界面的标题
        this.setTitle("拼图游戏 v1.0 登录");
        //设置界面置顶
        this.setAlwaysOnTop(true);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    //取消内部默认布局，才可以实现组件的位置由定义摆放
        this.setLayout(null);

    }
    //要展示用户名或密码错误
    public void showJDialog(String content) {
        //创建一个弹框对象
        JDialog jDialog = new JDialog();
        //给弹框设置大小
        jDialog.setSize(200, 150);
        //让弹框置顶
        jDialog.setAlwaysOnTop(true);
        //让弹框居中
        jDialog.setLocationRelativeTo(null);
        //弹框不关闭永远无法操作下面的界面
        jDialog.setModal(true);

        //创建Jlabel对象管理文字并添加到弹框当中
        JLabel warning = new JLabel(content);
        warning.setBounds(0, 0, 200, 150);
        jDialog.getContentPane().add(warning);

        //让弹框展示出来
        jDialog.setVisible(true);
    }

    @Override
    public void mouseClicked(MouseEvent e) {

        //判断登陆是否成功
        Object obj=e.getSource();

        if(obj==login)
        {
            System.out.println("按下登录按钮");
            //获得两个文本输入框的内容
            String usernameInput=UserName.getText();
            String passwordInput=password.getText();
            //获取用户输入的验证码
            String codeInput=code.getText();



            //定义一个用户能够记录他输入的三个信息并和实际正确的信息记录相比较
            User userInfo=new User(usernameInput,passwordInput);
            System.out.println("用户输入的用户名为："+usernameInput);
            System.out.println("用户输入的密码为"+passwordInput);

            if(codeInput.length()==0)
            {
                showJDialog("验证码不能为空");
            }else if(usernameInput.length()==0||passwordInput.length()==0)
            {
                System.out.println("用户名或者密码为空");
                showJDialog("用户名或者密码为空");
            }else if(!codeInput.equalsIgnoreCase(rightCode.getText()))
            {
                showJDialog("验证码输入错误");
            }else if(contains(userInfo))
            {
                System.out.println("用户名和密码正确就可以开始游戏了");
                //关闭当前登陆界面
                this.setVisible(false);
                //打开游戏主界面
                 new GameJFrame();
            }else //输入错误
            {
                System.out.println("用户名或密码错误");
                showJDialog("用户名或密码错误");

            }
        }else if(obj==register)
        {
            System.out.println("点击了注册按钮");
        }else if(obj==rightCode)
        {
            System.out.println("更换验证码");
            //创建新的验证码
            String code=CodeUtil.getCode();
            rightCode.setText(code);
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {

        Object obj=e.getSource();
        if(obj==login){
        login.setIcon(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\登录按下.png"));
     }else if(obj==register)
        {
            register.setIcon(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\注册按下.png"));
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        Object obj=e.getSource();
        if(obj==login) {
            login.setIcon(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\登录按钮.png"));

        }else if(obj==register)
        {
            register.setIcon(new ImageIcon("D:\\JavaCode\\PROJECT\\PuzzleGame\\01\\image\\login\\注册按钮.png"));
        }
    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }
    
    public boolean contains(User userInput)
    {
        for (int i = 0; i <allUser.size() ; i++) {
            User rightUser=allUser.get(i);
            if(userInput.getUsername().equals(rightUser.getUsername())&&userInput.getPassword().equals(rightUser.getPassword()))
            {
                return true;
            }
        }

        return false;
    }

}
